/*
 * author      : 吴中勤
 * date        : 2018/8/22
 * description : 车辆转换 sap -> moby
 */

package com.deepexi.adapter.rest.sap.parser;

import com.deepexi.adapter.facade.sap.request.SapPushVehicleInfoBody;
import com.deepexi.adapter.sdk.moby.request.VehicleInfo;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

public class SapPushVehicleInfoParser extends BaseParser<VehicleInfo, SapPushVehicleInfoBody> {

    private static final String SAP_MATERIAL_AVAILABLE = "Y";
    private static final String Moby_MATERIAL_AVAILABLE = "1";
    private static final String MOBY_MATERIAL_UNAVAILABLE = "0";

    @Override
    protected void convertEachSapItem(SapPushVehicleInfoBody sapItem) {
        VehicleInfo mobyItem = new VehicleInfo();
        mobyItem.setModelCode(sapItem.getModelCode());                  // 车型
        mobyItem.setModelLineCode(sapItem.getModelLineCode());          // 车系
        mobyItem.setExteriorPartCode(sapItem.getExteriorPartCode());    // 外观
        mobyItem.setInteriorPartCode(sapItem.getInteriorPartCode());    // 内饰
        mobyItem.setPlateNumber("");                                    // 车牌号
        mobyItem.setSaleCode(sapItem.getModelCode());                   // 销售代码=车型
        mobyItem.setLanuchDate(0L);
        mobyItem.setTimeSpan(sapItem.getStorageBeginDate());

        mobyItem.setVinCode(sapItem.getVinCode());
        mobyItem.setVehicleCode(sapItem.getVehicleCode());
        mobyItem.setShopId(sapItem.getShopCode());
        mobyItem.setBuyerStatus("");
        mobyItem.setUsingYears("");
        mobyItem.setHasMileage("");
        String saleStatus = SAP_MATERIAL_AVAILABLE.equals(sapItem.getAvilable()) ? Moby_MATERIAL_AVAILABLE : MOBY_MATERIAL_UNAVAILABLE;
        mobyItem.setSaleStatus(saleStatus);

        // 新增 - 1
        mobyItem.setWarehouseCode(sapItem.getWarehouseCode());
        mobyItem.setBrancCode(sapItem.getBrandCode());
        mobyItem.setBrandDesc(sapItem.getBrandDesc());
        mobyItem.setModelLineDesc(sapItem.getModelLineDesc());
        mobyItem.setModelDesc(sapItem.getModelDesc());
        // 新增 - 2
        mobyItem.setMaterialCode(sapItem.getMaterialCode());
        mobyItem.setEngineCode(sapItem.getEngineCode());
        mobyItem.setQuantity(sapItem.getQuantity());
        mobyItem.setPurchasePrice(sapItem.getPurchasePrice());
        mobyItem.setGuidePrice(sapItem.getGuidePrice());
        // 新增 - 3
        mobyItem.setMfrDate(sapItem.getProductDate());
        mobyItem.setQualifiedNumber(sapItem.getCertificateNo());
        mobyItem.setWarehouseAgeStartDate(sapItem.getStorageBeginDate());
        mobyItem.setEntranceVehicleStatus(sapItem.getImportStatus());
        mobyItem.setProduceDate(sapItem.getProducedAt());
        // 新增 - 4
        mobyItem.setCarriageDate(sapItem.getTransferedAt());
        mobyItem.setExpectedArrivalPortDate(sapItem.getExpectArrivePortDate());
        mobyItem.setArrivalPortDate(sapItem.getArrivePortDate());
        mobyItem.setReportedAAKDate(sapItem.getReportAAKDate());
        mobyItem.setMfrOrderId(sapItem.getMfrOrderNo());
        // 新增 - 5
        mobyItem.setMfrVehicleCode(sapItem.getMfrVehicleCode());
        mobyItem.setFrontLoading(sapItem.getPreloadStatus());

        mobyRequestBodyList.add(mobyItem);
    }

    @Override
    protected List<SapPushVehicleInfoBody> parseSapListFromRecordsStr(String recordsStr) {
        Type collectionType = new TypeToken<List<SapPushVehicleInfoBody>>() {
        }.getType();
        return new Gson().fromJson(recordsStr, collectionType);
    }

}
